home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / v7n11.arc / PRNBYL.ASM < prev   
Encoding:
Assembly Source File  |  1988-03-28  |  6.2 KB  |  172 lines

  1. ;PRNBYLIN.ASM      Russell W. Powell
  2. ;PRNBYLIN.ASM is a memory resident program that allows you
  3. ;to print one or more lines when using <Shft>-<PrtSC>.
  4. ;
  5. ;Assemble and link with MASM, then create .COM file using
  6. ;EXE2BIN
  7.  
  8. ;set up installation of TSR
  9. CSEG           SEGMENT
  10.                ASSUME    CS:CSEG,DS:CSEG,ES:CSEG
  11.                ORG       0100H
  12. START:         JMP       INIT
  13. IRUPT          DW        0
  14. IRPT1          DW        0
  15. CURPOS         DW        0
  16.  
  17.  
  18. MAIN:          PUSH      DX                       ;save registers
  19.                PUSH      AX
  20.                PUSH      BX
  21.                PUSH      CX
  22.                PUSH      DS
  23.                PUSHF      
  24.                PUSH      CS
  25.                POP       DS
  26.                MOV       AX,0050H                 ;check if PrtSc is
  27.                MOV       ES,AX                    ;active
  28.                CMP       BYTE PTR ES:[0000H],01
  29.                JZ        ENDM
  30.                MOV       BYTE PTR ES:[0000H],01   ;make PrtSc active
  31.                MOV       AH,0FH
  32.                INT       10H
  33.                CMP       AL,3                     ;check for 80-col mode
  34.                JLE       SAVECUR
  35. ENDM:          POPF                               ;return to BIOS PrtSc
  36.                POP       DS
  37.                POP       CX
  38.                POP       BX
  39.                POP       AX
  40.                POP       DX
  41.                JMP       FAR [IRUPT]
  42. SAVECUR:       MOV       AH,3                     ;save cursor position
  43.                INT       10H
  44.                MOV       CURPOS,DX
  45.                XOR       CX,CX
  46.                MOV       DX,CX
  47.                MOV       AH,2
  48.                INT       10H
  49.                CALL      ATTR                     ;show selection bar
  50. GETKEY:        XOR       AH,AH                    ;get key
  51.                INT       16H
  52.                CMP       AH,1CH                   ;test for <CR>
  53.                JE        SELECT                   
  54.                CMP       AH,4AH                   ;test for <+>
  55.                JE        PGUP
  56.                CMP       AH,01                    ;test for <ESC>
  57.                JE        END10                    ;quit
  58.                CMP       AH,4EH                   ;test for <->
  59.                JNE       GETKEY
  60. PGDN:          CMP       CL,24                    ;move bar down
  61.                JE        GETKEY 
  62.                CMP       CH,CL
  63.                JNZ       PGD1
  64.                CALL      ATTR
  65.                INC       CH
  66. PGD1:          INC       CL                       
  67.                CALL      ATTR
  68.                JMP       GETKEY
  69. SELECT:        CMP       CH,CL                    ;get line positions
  70.                JNZ       PRINT                    ;and print
  71.                CMP       CL,24
  72.                JE        PRINT
  73.                INC       CL
  74.                CALL      ATTR
  75.                JMP       GETKEY
  76. PGUP:          CMP       CL,0                     ;move bar up
  77.                JZ        GETKEY
  78.                CALL      ATTR
  79.                CMP       CH,CL
  80.                JNZ       PGU1
  81.                DEC       CH
  82.                DEC       CL
  83.                JMP       PGU2
  84. PGU1:          DEC       CL
  85.                CMP       CL,CH
  86.                JNZ       GETKEY
  87.                INC       CL
  88. PGU2:          CALL      ATTR
  89.                JMP       GETKEY
  90. PRINT:         MOV       DH,CH
  91.                SUB       CL,CH                    ;get characters and
  92.                XOR       CH,CH                    ;send to printer
  93.                INC       CX
  94. PRN1:          PUSH      CX
  95.                MOV       CL,DH
  96.                CALL      ATTR
  97.                CALL      PRNT
  98.                INC       CL
  99.                MOV       DH,CL
  100.                POP       CX
  101.                LOOP      PRN1
  102. END1:          MOV       DX,CURPOS                ;reset cursor and 
  103.                MOV       AH,2                     ;return
  104.                INT       10H
  105.                MOV       BYTE PTR ES:[0000H],00H
  106.                POPF       
  107.                POP       DS
  108.                POP       CX
  109.                POP       BX
  110.                POP       AX
  111.                POP       DX
  112.                IRET
  113. END10:         CALL      ATTR
  114.                JMP       END1
  115. ATTR:          PUSH      CX                       ;get current 
  116.                MOV       DH,CL                    ;attributes and
  117.                XOR       DL,DL                    ;reverse them
  118.                MOV       CX,80
  119. ATR1:          PUSH      CX
  120.                MOV       AH,2
  121.                INT       10H 
  122.                MOV       AH,8
  123.                INT       10H
  124.                XOR       AH,7FH
  125.                MOV       BL,AH
  126.                MOV       AH,9
  127.                MOV       CX,1
  128.                INT       10H
  129.                INC       DL
  130.                POP       CX
  131.                LOOP      ATR1
  132.                POP       CX
  133.                RET
  134. PRNT:          PUSH      CX                       ;printer output
  135.                MOV       DH,CL                    ;routine 
  136.                XOR       DL,DL
  137.                MOV       CX,80
  138. PTR1:          PUSH      CX
  139.                MOV       AH,2
  140.                INT       10H 
  141.                MOV       AH,8
  142.                INT       10H
  143.                PUSH      DX
  144.                XOR       DX,DX
  145.                XOR       AH,AH
  146.                INT       17H
  147.                POP       DX
  148.                INC       DL
  149.                POP       CX
  150.                LOOP      PTR1
  151.                PUSH      DX
  152.                XOR       DX,DX
  153.                MOV       AX,000DH
  154.                INT       17H
  155.                XOR       DX,DX
  156.                MOV       AX,000AH
  157.                INT       17H
  158.                POP       DX
  159.                POP       CX
  160.                RET
  161. INIT:          MOV       AX,3505H                 ;setup TSR
  162.                INT       21H
  163.                MOV       IRUPT,BX                 ;replace old
  164.                MOV       IRPT1,ES                 ;vector with new
  165.                MOV       DX,OFFSET MAIN           ;one
  166.                MOV       AX,2505H
  167.                INT       21H
  168.                MOV       DX,OFFSET INIT
  169.                INT       27H
  170. CSEG           ENDS
  171.                END       START
  172.